package mySelist;

import java.util.Arrays;

public class score_student implements IList{

    public int[] array;
    public int usersize;
    public static final int DEFAULT_CAPACITY = 10;
    public score_student() {
        this.array = new int[DEFAULT_CAPACITY];
    }
    // 新增元素,默认在数组最后新增
    @Override
    public void add(int data) {
       if(isFull()){
            grow();
        }
       this.array[this.usersize]=data;
       usersize++;
    }
//扩容
    private int[] grow() {
        return this.array=Arrays.copyOf(this.array,2*this.array.length);
    }
//判断是否满了
    @Override
    public boolean isFull() {
        return this.usersize==this.array.length;
    }
    // 在 pos 位置新增元素
    @Override
    public void add(int pos, int data) {
     try{
         Checkpos(pos);
         if(isFull()){
             grow();
         }
         for (int i = usersize-1; i >=pos ; i--) {
             array[i+1]=array[i];
         }
         array[pos]=data;
         usersize++;
     }catch (posiligal e){
       e.printStackTrace();
     }
    }

    private void Checkpos(int pos) throws posiligal{
        if(pos<0||pos>usersize){
            throw new posiligal("pos输入位置不合法！！！");
        }
    }
    // 判定是否包含某个元素
    @Override
    public boolean contains(int toFind) {
        if (isempty()) {
            return false;
        }
        if(Find(toFind)){
            return true;
        }
        return false;
    }

    private boolean Find(int tofind) {
        for (int i = 0; i < usersize; i++) {
            if(array[i]==tofind){
                return true;
            }
        }
        return false;
    }

    private boolean isempty() {
        return usersize==0;
    }
    // 查找某个元素对应的下标位置
    @Override
    public int indexOf(int toFind) {
        if (isempty()) {
            return 0;
        }
        for (int i = 0; i < usersize; i++) {
            if(array[i]==toFind){
                return i;
            }
        }
        return -1;
    }
    // 获取 pos 位置的元素
    @Override
    public int get(int pos) {
       try{
           Checkpos(pos);
           if(isempty()){
               return -1;
           }
       }catch (posiligal e){
           e.printStackTrace();
       }
        return array[pos];
    }
    // 给 pos 位置的元素设为 value
    @Override
    public void set(int pos, int value) {
if(isempty()){
    return;
}
array[pos]=value;
    }
    //删除第一次出现的关键字key
    @Override
    public void remove(int toRemove) {
       if(contains(toRemove)){
           int remove=indexOf(toRemove);
           for (int i = remove; i <usersize ; i++) {
               array[i]=array[i+1];
           }
           usersize--;
       }
    }
    // 获取顺序表长度
    @Override
    public int size() {
        return usersize;
    }
    // 清空顺序表
    @Override
    public void clear() {
        usersize=0;
    }
//打印
    @Override
    public void display() {
        for (int i = 0; i <usersize ; i++) {
           System.out.print(array[i]+" ");
        }
    }
}
